﻿Imports System.Data.SqlClient
Imports UTNComputers.clsCatalogo
Imports UTNComputers.daoCatalogo

Public Class daoPresupuesto_Detalle
    'Funcion para el alta de Detalle de Presupuesto'
    Public Function Alta(ByVal Presu_Detalle As clsPresupuesto_Detalle) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_ALTA_PRESUPUESTO_DETALLE"

            Cm.Parameters.Add("@prsdte_id", SqlDbType.Int)
            Cm.Parameters.Add("@presu_id", SqlDbType.Int)
            Cm.Parameters.Add("@prod_id", SqlDbType.Int)
            Cm.Parameters.Add("@prsdte_cantidad", SqlDbType.Int)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)

            Cm.Parameters("@prsdte_id").Value = Presu_Detalle.Prsdte_Id
            Cm.Parameters("@presu_id").Value = Presu_Detalle.Presu_Id
            Cm.Parameters("@prod_id").Value = Presu_Detalle.Prod_Id
            Cm.Parameters("@prsdte_cantidad").Value = Presu_Detalle.Prsdte_Cantidad
            Cm.Parameters("@Cod_Suc").Value = Presu_Detalle.Cod_Suc

            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para la modificacion detalle de Presupuesto'
    Public Function Modificar(ByVal Presu_Detalle As clsPresupuesto_Detalle) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_MODI_PRESUPUESTO_DETALLE"

            Cm.Parameters.Add("@prsdte_id", SqlDbType.Int)
            Cm.Parameters.Add("@presu_id", SqlDbType.Int)
            Cm.Parameters.Add("@prod_id", SqlDbType.Int)
            Cm.Parameters.Add("@prsdte_cantidad", SqlDbType.Int)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)

            Cm.Parameters("@prsdte_id").Value = Presu_Detalle.Prsdte_Id
            Cm.Parameters("@presu_id").Value = Presu_Detalle.Presu_Id
            Cm.Parameters("@prod_id").Value = Presu_Detalle.Prod_Id
            Cm.Parameters("@prsdte_cantidad").Value = Presu_Detalle.Prsdte_Cantidad
            Cm.Parameters("@Cod_Suc").Value = Presu_Detalle.Cod_Suc

            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer un Detalle de Presupuesto por ID'
    Public Function TraeDetallePresupuesto(ByVal prsdte_id As Integer) As clsPresupuesto_Detalle
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim Presu_Detalle As New clsPresupuesto_Detalle()

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_PRESUPUESTO_DETALLE"

            Cm.Parameters.Add("@prsdte_id", SqlDbType.Int)
            Cm.Parameters("@prsdte_id").Value = prsdte_id
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Presu_Detalle.Prsdte_Id = Dr.GetInt32(0)
                    Presu_Detalle.Presu_Id = Dr.GetInt32(1)
                    Presu_Detalle.Prod_Id = Dr.GetInt32(2)
                    Presu_Detalle.Prsdte_Cantidad = Dr.GetInt32(3)
                    Presu_Detalle.Cod_Suc = Dr.GetInt32(4)

                    Dim Catalogo_Dao As New daoCatalogo()
                    Presu_Detalle.Producto = Catalogo_Dao.TraeArticulo(Presu_Detalle.Prod_Id)
                    Catalogo_Dao.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return Presu_Detalle
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todos los detalles de un Presupuesto por Nº Presupuesto'
    Public Function TraeDetallesPresupuesto(ByVal presu_id As Integer) As List(Of clsPresupuesto_Detalle)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaDetalle_Presu As New List(Of clsPresupuesto_Detalle)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_PRESUPUESTO_DETALLE_X_PRESU_ID"

            Cm.Parameters.Add("@presu_id", SqlDbType.Int)
            Cm.Parameters("@presu_id").Value = presu_id
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Presu_Detalle As New clsPresupuesto_Detalle()
                    Presu_Detalle.Prsdte_Id = Dr.GetInt32(0)
                    Presu_Detalle.Presu_Id = Dr.GetInt32(1)
                    Presu_Detalle.Prod_Id = Dr.GetInt32(2)
                    Presu_Detalle.Prsdte_Cantidad = Dr.GetInt32(3)
                    Presu_Detalle.Cod_Suc = Dr.GetInt32(4)

                    Dim Catalogo_Dao As New daoCatalogo()
                    Presu_Detalle.Producto = Catalogo_Dao.TraeArticulo(Presu_Detalle.Prod_Id)
                    Catalogo_Dao.Dispose()

                    ListaDetalle_Presu.Add(Presu_Detalle)
                    Presu_Detalle.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaDetalle_Presu
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    '---------------------------------------------------------------------
    ' Constructor de la Clase
    '---------------------------------------------------------------------
    Public Sub New()

        MyBase.New()

    End Sub

    '---------------------------------------------------------------------
    ' Destructor de la Clase
    '---------------------------------------------------------------------
    Public Sub Dispose()

        MyBase.Finalize()

    End Sub

End Class
